﻿using Ext.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Views_TypeOfInformations : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            StoreInformation_LoadData();
        }
    }
    protected void StoreListInformation_ReadData(object sender, Ext.Net.StoreReadDataEventArgs e)
    {
        StoreInformation_LoadData();
    }

    private void StoreInformation_LoadData()
    {
        using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
        {
            StoreInformation.DataSource = db.TypeOfInformations.ToList<TypeOfInformation>();
            StoreInformation.DataBind();

            GridPanelInformation.ActiveIndex = -1;
        }
    }

    protected void RowSelected(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;

                try
                {
                    rsm = GridPanelInformation.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để ...").Show();
                        return;
                    }
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để ...").Show();
                    return;
                }

                int inforID = Int32.Parse(rsm.SelectedRow.RecordID);
                TypeOfInformation tp = db.TypeOfInformations.Single(t => t.InforID == inforID);

                lblViewName.Text = tp.NameOfInfor;
                lblViewDes.Text = tp.Descriptons;
                chkViewStatus.Checked = Boolean.Parse(tp.StatusOfInfor.ToString());
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnAdd_DirectClick(object sender, DirectEventArgs e)
    {
        WindowAdd.Hidden = false;
        ResetForm_WindowAdd();
    }

    [DirectMethod]
    public void TypeOfInfomation_Add()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                string name = txtAddNameofInfo.Text.Trim();

                List<TypeOfInformation> info = db.TypeOfInformations.ToList<TypeOfInformation>();
                foreach (var item in info)
                {
                    if (item.NameOfInfor.ToLower().Equals(name.ToLower()))
                    {
                        lblFormAddMsg.Text = "Tên trình độ này đã tồn tại, hãy nhập tên khác";
                        txtAddNameofInfo.Focus(true, 100);
                        return;
                    }
                }
                TypeOfInformation tp = new TypeOfInformation()
                {
                    NameOfInfor = name,
                    Descriptons = txtAddDes.Text.Trim(),
                    StatusOfInfor = chkAdd.Checked
                };
                db.TypeOfInformations.Add(tp);
                db.SaveChanges();

                StoreInformation_LoadData();
                WindowAdd.Hidden = true;

                X.Msg.Alert("Thông báo", "Thêm mới trình độ tin học thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnAddCancel_DirectClick(object sender, DirectEventArgs e)
    {
        WindowAdd.Hidden = true;
    }

    protected void btnUpdate_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            lblUpdateMsg.Text = "";
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;

                try
                {
                    rsm = GridPanelInformation.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                        return;
                    }
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                    return;
                }

                int inforID = Int32.Parse(rsm.SelectedRow.RecordID);
                TypeOfInformation tp = db.TypeOfInformations.Single(t => t.InforID == inforID);

                txtUpdateName.Text = tp.NameOfInfor;
                txtUpdateDes.Text = tp.Descriptons;
                chkUpdate.Checked = Boolean.Parse(tp.StatusOfInfor.ToString());

                WindowUpdate.Hidden = false;

            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void TypeOfInfomation_Update()
    {
        try
        {
            lblUpdateMsg.Text = "";
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;

                try
                {
                    rsm = GridPanelInformation.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                        return;
                    }
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                    return;
                }

                int inforID = Int32.Parse(rsm.SelectedRow.RecordID);
                TypeOfInformation tp = db.TypeOfInformations.Single(t => t.InforID == inforID);

                string newName = txtUpdateName.Text.Trim();

                foreach (var item in db.TypeOfInformations)
                {
                    if (item.NameOfInfor.ToLower().Equals(newName.ToLower()) && item.InforID != tp.InforID)
                    {
                        lblUpdateMsg.Text = "Tên trình độ này đã tồn tại, xin hãy nhập tên khác";
                        return;
                    }
                }
                tp.NameOfInfor = newName;
                tp.Descriptons = txtUpdateDes.Text.Trim();
                tp.StatusOfInfor = chkUpdate.Checked;

                db.SaveChanges();
                StoreInformation_LoadData();

                WindowUpdate.Hidden = true;
                X.Msg.Alert("Thông báo", "Cập nhật thông tin trình độ tin học thành công").Show();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnDelete_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;
                TypeOfInformation tp = null;

                try
                {
                    rsm = GridPanelInformation.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để xóa").Show();
                        return;
                    }

                    int inforID = Int32.Parse(rsm.SelectedRow.RecordID);
                    tp = db.TypeOfInformations.Single(t => t.InforID == inforID);
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để xóa").Show();
                    return;
                }

                X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa trình độ đã chọn ? [{0}]", tp.NameOfInfor),
                        new MessageBoxButtonsConfig()
                        {
                            Yes = new MessageBoxButtonConfig
                            {
                                Text = "Xóa",
                                Handler = "App.direct.DoYes_DeleteTypeOfInformation();"
                            },
                            No = new MessageBoxButtonConfig
                            {
                                Text = "Hủy bỏ"
                            }
                        }).Show();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteTypeOfInformation()
    {
        try
        {
            lblUpdateMsg.Text = "";
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelInformation.SelectionModel.Primary as RowSelectionModel;  

                int inforID = Int32.Parse(rsm.SelectedRow.RecordID);
                TypeOfInformation tp = db.TypeOfInformations.Single(t => t.InforID == inforID);

                db.TypeOfInformations.Remove(tp);

                db.SaveChanges();
                StoreInformation_LoadData();

                WindowUpdate.Hidden = true;
                X.Msg.Alert("Thông báo", "Xóa trình độ tin học thành công").Show();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    private void ResetForm_WindowAdd()
    {
        lblFormAddMsg.Text = "";
        txtAddNameofInfo.Text = "";
        txtAddDes.Text = "";
        chkAdd.Checked = false;
    }

    private void ResetControls_ViewInfo()
    {
        lblViewName.Text = "";
        lblViewDes.Text = "";
        chkUpdate.Checked = false;
    }

}